/*
 * EnumsAndTads.h
 *
 *  Created on: 01/10/2011
 *      Author: utn_so
 */
#include <inttypes.h>

#ifndef ENUMSANDTADS_H_
#define ENUMSANDTADS_H_

//ESTRUCTURA DE LOS COMANDOS VALIDOS

	typedef struct info{
					char *respuesta;
	}__attribute__ ((__packed__))pedido_info;

	typedef struct clean{
					int32_t sectorInicial;
					int32_t sectorFinal;
	}__attribute__ ((__packed__))pedido_clean;

	typedef struct trace1{
					int32_t s1;
	}__attribute__ ((__packed__))pedido_t1;

	typedef struct trace2{
					int32_t s1;
					int32_t s2;
	}__attribute__ ((__packed__))pedido_t2;

	typedef struct trace3{
					int32_t s1;
					int32_t s2;
					int32_t s3;
	}__attribute__ ((__packed__))pedido_t3;

	typedef struct trace4{
					int32_t s1;
					int32_t s2;
					int32_t s3;
					int32_t s4;
	}__attribute__ ((__packed__))pedido_t4;

	typedef struct trace5{
					int32_t s1;
					int32_t s2;
					int32_t s3;
					int32_t s4;
					int32_t s5;
	}__attribute__ ((__packed__))pedido_t5;

	typedef struct{
		int32_t cylinder;
		int32_t head;
		int32_t sector;
	}__attribute__ ((__packed__)) PPD_CHS;

	//CABECERA DEL PAQUETE DEL PROTOCOLO NIPC

	typedef struct cabeceraPaquete{
					int32_t type;
					int32_t payloadlength;
	}__attribute__ ((__packed__)) cabecera_paquete;

	typedef struct respuesta_trace
	{
		int32_t posicionActual;
		int32_t sectorSolicitado;
		float tiempoConsumido;
		int32_t proximoSector;
	}__attribute__ ((__packed__)) respuesta_trace;


	//ESTRUCTURA DEL FLUJO DE DATO STREAM ENCARGADO DE ENVIAR EL PROTOCOLO

	typedef struct
	{
		int32_t length;
		char *data;
	}t_stream;

	//ESTRUCTURA DE LOS PROTOCOLOS NIPC DE RESPUESTA A LOS PEDIDOS INFO, CLEAN Y TRACE

	typedef struct protocoloINFO_respuesta
	{
		cabecera_paquete cabecera;
		int32_t posicionActual;
	}__attribute__ ((__packed__))protocoloINFO_respuesta;

	typedef struct protocoloCLEAN_respuesta
	{
		cabecera_paquete cabecera;
		int32_t respuestaClean;
	}__attribute__ ((__packed__))protocoloCLEAN_respuesta;

	typedef struct protocoloTRACE_respuesta
	{
		cabecera_paquete cabecera;
		respuesta_trace payload;
		char *sectoresRecorridos;
	}__attribute__ ((__packed__))protocoloTRACE_respuesta;

	//ESTRUCTURA DE LOS PROTOCOLOS NIPC DE PEDIDOS DE INFO, CLEAN, TRACE1, TRACE2, TRACE3, TRACE4 Y TRACE5

	typedef struct protocoloINFO
	{
		cabecera_paquete cabecera;
		pedido_info payload;
	}protocoloINFO;

	typedef struct protocoloCLEAN
	{
		cabecera_paquete cabecera;
		pedido_clean payload;
	}protocoloCLEAN;

	typedef struct protocoloTRACE1
	{
		cabecera_paquete cabecera;
		pedido_t1 payload;
	}protocoloTRACE1;

	typedef struct protocoloTRACE2
	{
		cabecera_paquete cabecera;
		pedido_t2 payload;
	}protocoloTRACE2;

	typedef struct protocoloTRACE3
		{
			cabecera_paquete cabecera;
			pedido_t3 payload;
		}protocoloTRACE3;

	typedef struct protocoloTRACE4
	{
		cabecera_paquete cabecera;
		pedido_t4 payload;
	}protocoloTRACE4;

	typedef struct protocoloTRACE5
	{
		cabecera_paquete cabecera;
		pedido_t5 payload;
	}protocoloTRACE5;

	//TIPOS DE PEDIDOS CAPACES DE ENVIAR Y RECIBIR

	enum NIPC_TYPE {HANDSHAKE=0,
					LECTURA=1,
					LECTURA_OK = 11,
					ESCRITURA=2,
					ESCRITURA_OK=21,
					LECTURA_ERROR=10,
					ESCRITURA_ERROR=20,
					INFO=3,
					CLEAN=4,
					TRACE1=51,
					TRACE2=52,
					TRACE3=53,
					TRACE4=54,
					TRACE5=55,
					SIZEPEDIDOS=56,
					TEMPO=57
	};

	#endif /* ENUMSANDTADS_H_ */
